package com.yoda.mall.admin.auth;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.yoda.common.constant.RC;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtils {

    /**
     * 获得token
     *
     * @param params 参数个数
     * @return {@link String}
     */
    public static String getToken(Map<String,Object> params){
        return Jwts.builder()
                //加密方式
                .signWith(SignatureAlgorithm.HS512, RC.TOKEN_KEY)
                //过期时间
                .setExpiration(new Date(System.currentTimeMillis()+RC.TOKEN_TIME_OUT*1000))
                //加密数据
                .addClaims(params)
                .compact();
    }

    /**
     * 获取Token中的claims信息
     *
     * @param token 令牌
     * @return {@link Claims}
     */
    public static Claims getClaims(String token){
        return Jwts.parser()
                //设置解读密钥
                .setSigningKey(RC.TOKEN_KEY)
                //传入解密数据
                .parseClaimsJws(token)
                .getBody();
    }

    /**
     * 验证token
     *
     * @param token 令牌
     * @return boolean
     */
    public static boolean verifyToken(String token){
        if (StringUtils.isEmpty(token)){
            //token不存在
            return false;
        }
        try {
            Jwts.parser()
                    //设置解读密钥
                    .setSigningKey(RC.TOKEN_KEY)
                    //传入解密数据
                    .parseClaimsJws(token)
                    .getBody();

        }catch (Exception e){
            //token已过期
            return false;
        }
        return true;
    }
}
